Hi,
I'm trying to code Dijkstra by using STL, but I keep getting this error. I must be missing but I can't find it, here is the code:
Code:
#include <iostream>
#include <cstdio>
#include <set>
#include <cstdlib>
#include <ctime>
#include <fstream>
#include <vector>
#include <algorithm>
#include <utility>
#define ii pair<int,int>
#define MAXV 1000
#define UNDIRECTED 1
#define MAX 0x7fffffff
int startv = 1, finalv = 0, nvertex, nedge;
using namespace std;
FILE *in,*out;
//ifstream in("
void dijkstra();
void read_file();
vector<ii > m[MAXV];
int main() {
read_file();
dijkstra();
}
void read_file() {
in = fopen("girdi.in","r");
fscanf(in,"%d%d",&nvertex,&nedge);
finalv = nvertex;
for (int i=0; i<nedge; ++i) {
int v1,v2,w;
fscanf(in,"%d%d%d",&v1,&v2,&w);
m[v1].push_back(ii(v2,w));
if (UNDIRECTED) m[v2].push_back(ii(v1,w));
}
}
void dijkstra() {
set<ii > Q;
int d[MAXV]; for (int i=0; i<MAXV; i++) d[i] = MAX;
d[startv] = 0;
Q.insert(ii(startv,d[startv]));
while (!Q.empty()) {
ii cur = *Q.begin();
Q.erase(Q.begin());
int v = cur.first, d = cur.second;
for (vector<ii >::iterator it = m[v].begin(); it != m[v].end(); it++) {
int v2 = it->first, cost = it->second;
if (d[v2] > d[v] + cost) {
if (d[v2] != MAX) Q.erase(Q.find(ii(v2,d[v2])));
d[v2] = d[v] + cost;
Q.insert(ii(v2,d[v2]));
}
}
}
printf("%d\n",d[finalv]);
}
and here are the errors:
Code:
main.cpp: In function `void dijkstra()':
main.cpp:54: error: invalid types `int[int]' for array subscript
main.cpp:54: error: invalid types `int[int]' for array subscript
main.cpp:55: error: invalid types `int[int]' for array subscript
main.cpp:55: error: invalid types `int[int]' for array subscript
main.cpp:56: error: invalid types `int[int]' for array subscript
main.cpp:56: error: invalid types `int[int]' for array subscript
main.cpp:57: error: invalid types `int[int]' for array subscript
Thanks in advance!